1 using System;
2 using
System.Collections.Generic;
3 using
System.Diagnostics;
4 using
System.IO;
5 using
System.Reflection;
6 using
ExitGames.Client.Photon;
7 using
UnityEngine;
8 using
System.Collections;
9 using
UnityEditor;
10 using
Debug = UnityEngine.Debug;
11
12
13
14 [CustomEditor(
typeof(ServerSettings))]
15 public
class ServerSettingsInspector : Editor
16 {
17     
public override void OnInspectorGUI()
18     {
19         ServerSettings settings = (ServerSettings)
this.target;
20
21         #
if UNITY_3_5
22         EditorGUIUtility.LookLikeInspector();
23         #endif
24
25
26         settings.HostType = (ServerSettings.HostingOption)EditorGUILayout.EnumPopup(
"Hosting", settings.HostType);
27         EditorGUI.indentLevel =
1;
28
29         
switch (settings.HostType)
30         {
31             
case ServerSettings.HostingOption.BestRegion:
32             
case ServerSettings.HostingOption.PhotonCloud:
33                 
if (settings.HostType == ServerSettings.HostingOption.PhotonCloud)
34                     settings.PreferredRegion = (CloudRegionCode)EditorGUILayout.EnumPopup(
"Region", settings.PreferredRegion);
35                 settings.AppID = EditorGUILayout.TextField(
"AppId", settings.AppID);
36                 settings.Protocol = (ConnectionProtocol)EditorGUILayout.EnumPopup(
"Protocol", settings.Protocol);
37
38                 
if (string.IsNullOrEmpty(settings.AppID) || settings.AppID.Equals("master"))
39                 {
40                     EditorGUILayout.HelpBox(
"The Photon Cloud needs an AppId (GUID) set.\nYou can find it online in your Dashboard.", MessageType.Warning);
41                 }
42                 
break;
43
44             
case ServerSettings.HostingOption.SelfHosted:
45                 
bool hidePort = false;
46                 
if (settings.Protocol == ConnectionProtocol.Udp && (settings.ServerPort == 4530 || settings.ServerPort == 0))
47                 {
48                     settings.ServerPort =
5055;
49                 }
50                 
else if (settings.Protocol == ConnectionProtocol.Tcp && (settings.ServerPort == 5055 || settings.ServerPort == 0))
51                 {
52                     settings.ServerPort =
4530;
53                 }
54                 #
if RHTTP
55                 
if (settings.Protocol == ConnectionProtocol.RHttp)
56                 {
57                     settings.ServerPort =
0;
58                     hidePort =
true;
59                 }
60                 #endif
61                 settings.ServerAddress = EditorGUILayout.TextField(
"Server Address", settings.ServerAddress);
62                 settings.ServerAddress = settings.ServerAddress.Trim();
63                 
if (!hidePort)
64                 {
65                     settings.ServerPort = EditorGUILayout.IntField(
"Server Port", settings.ServerPort);
66                 }
67                 settings.Protocol = (ConnectionProtocol)EditorGUILayout.EnumPopup(
"Protocol", settings.Protocol);
68                 settings.AppID = EditorGUILayout.TextField(
"AppId", settings.AppID);
69                 
break;
70
71             
case ServerSettings.HostingOption.OfflineMode:
72                 EditorGUI.indentLevel =
0;
73                 EditorGUILayout.HelpBox(
"In 'Offline Mode', the client does not communicate with a server.\nAll settings are hidden currently.", MessageType.Info);
74                 
break;
75
76             
case ServerSettings.HostingOption.NotSet:
77                 EditorGUI.indentLevel =
0;
78                 EditorGUILayout.HelpBox(
"Hosting is 'Not Set'.\nConnectUsingSettings() will not be able to connect.\nSelect another option or run the PUN Wizard.", MessageType.Info);
79                 
break;
80
81             
default:
82                 DrawDefaultInspector();
83                 
break;
84         }
85
86         
if (PhotonEditor.CheckPunPlus())
87         {
88             settings.Protocol = ConnectionProtocol.Udp;
89             EditorGUILayout.HelpBox(
"You seem to use PUN+.\nPUN+ only supports reliable UDP so the protocol is locked.", MessageType.Info);
90         }
91
92         settings.AppID = settings.AppID.Trim();
93
94         EditorGUI.indentLevel =
0;
95         SerializedObject sObj =
new SerializedObject(this.target);
96         SerializedProperty sRpcs = sObj.FindProperty(
"RpcList");
97         EditorGUILayout.PropertyField(sRpcs,
true);
98         sObj.ApplyModifiedProperties();
99
100         GUILayout.BeginHorizontal();
101         GUILayout.Space(
20);
102         
if (GUILayout.Button("Refresh RPCs"))
103         {
104             PhotonEditor.UpdateRpcList();
105             Repaint();
106         }
107         
if (GUILayout.Button("Clear RPCs"))
108         {
109             PhotonEditor.ClearRpcList();
110         }
111         
if (GUILayout.Button("Log HashCode"))
112         {
113             Debug.Log(
"RPC-List HashCode: " + RpcListHashCode() + ". Make sure clients that send each other RPCs have the same RPC-List.");
114         }
115         GUILayout.Space(
20);
116         GUILayout.EndHorizontal();
117
118         
//SerializedProperty sp = serializedObject.FindProperty("RpcList");
119         
//EditorGUILayout.PropertyField(sp, true);
120
121         
if (GUI.changed)
122         {
123             EditorUtility.SetDirty(target);
124         }
125     }
126
127     
private int RpcListHashCode()
128     {
129         
// this is a hashcode generated to (more) easily compare this Editor's RPC List with some other
130         
int hashCode = PhotonEditor.Current.RpcList.Count + 1;
131         
foreach (string s in PhotonEditor.Current.RpcList)
132         {
133             
int h1 = s.GetHashCode();
134             hashCode = ((h1 <<
5) + h1) ^ hashCode;
135         }
136
137         
return hashCode;
138     }
139 }


SerializedProperty sp = serializedObject.FindProperty("RpcList");

EditorGUILayout.PropertyField(sp, true);

this is a hashcode generated to (more) easily compare this Editor's RPC List with some other




Trò chơi Tic-Tac-Toe, game đánh caro full source code 53.506 lượt xem

Gõ tìm kiếm nhanh...